package persistencia;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Vector;

import model.Producto;
import view.ProductoView;

public class AdministradorPersistenciaProducto extends
		AdministradorPersistencia {

	private static AdministradorPersistenciaProducto instancia;
	private String queryBuscarProd = "select * from productos where codigoProducto=? and estado='ACTIVO'";
	private String queryCodigoProducto = "select codigoProducto from productos where nombre=?";	
	private String queryView = "select * from productos where estado='ACTIVO'";
	private String queryExisteProd = "Select codigoProducto from productos where nombre=? and tipo=?";

	private AdministradorPersistenciaProducto() {

	}

	public static AdministradorPersistenciaProducto getInstance() {
		if (instancia == null) {
			instancia = new AdministradorPersistenciaProducto();
		}
		return instancia;
	}
	
	public Vector<ProductoView> obtenerVistaProductos() throws Exception {
		Vector<ProductoView> lista = new Vector<ProductoView>();
		Connection con = super.getConnection();
		PreparedStatement ps = con.prepareStatement(queryView);
		ResultSet rs = ps.executeQuery();
		while (rs.next()){
			ProductoView p = new ProductoView(
					rs.getInt("codigoProducto"),
					rs.getString("nombre"),
					rs.getFloat("precio"),
					rs.getInt("stock"),
					rs.getString("tipo"),
					rs.getString("estacion")
					);
			lista.add(p);
		}
		con.close();
		return lista;
	}

	public Producto buscarProducto(int codigo) throws Exception {
		Connection con = super.getConnection();
		PreparedStatement ps = con.prepareStatement(queryBuscarProd);
		ps.setInt(1, codigo);
		ResultSet rs = ps.executeQuery();
		Producto prod = null;
		while (rs.next()) {
			String tipo = rs.getString("tipo");
			if (tipo.equals("PRENDA_SIN_TEMPORADA")) {
				prod = AdministradorPersistenciaSinTemporada.getInstance().buscarPrenda(codigo);
			}
			if (tipo.equals("PRENDA_CON_TEMPORADA")) {
				prod = AdministradorPersistenciaPrendaTemporada.getInstance().buscarPrenda(codigo);
			}
			if (tipo.equals("CONJUNTO")) {
				prod = AdministradorPersistenciaConjunto.getInstance().buscarConjunto(codigo);
			}
		}
		con.close();
		return prod;
	}

	public int obtenerCodigoProducto(String nombre) throws Exception {
		Connection con = super.getConnection();
		PreparedStatement ps = con.prepareStatement(queryCodigoProducto);
		ps.setString(1, nombre);
		ResultSet res = ps.executeQuery();
		int codigo = 0;
		while (res.next()) {
			codigo = res.getInt("codigoProducto");
		}
		con.close();
		return codigo;
	}

	public boolean existeProducto(String nombre, String tipo) throws Exception {
		Connection con = super.getConnection();
		PreparedStatement ps = con.prepareStatement(queryExisteProd);
		ps.setString(1, nombre);
		ps.setString(2, tipo);
		ResultSet rs = ps.executeQuery();
		boolean existeProd = false;
		if (rs.next()) {
			existeProd = true;
		}
		con.close();
		return existeProd;
	}

}
